/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CapaNegocios;

import controlrestaurante.pmf;
import controlador.BebidasJpaController;
import entidad.Bebidas;
import controlador.ClasificacionJpaController;
import entidad.Clasificacion;
import entidad.BebidasHasProducto;
import controlador.BebidasHasProductoJpaController;
import entidad.Producto;
import java.util.List;

/**
 *
 * @author Milvia
 */
public class CNBebidas {
    public static boolean insertar(Bebidas bebida)
    {        
        try{
            BebidasJpaController controlador = new BebidasJpaController(pmf.getInstancia().getEMF());
            controlador.create(bebida);
        }catch (Exception e){
            return false;
        }
        return true;  
    }
    
    public static boolean insertar(String nombre, float precio, String descripcion, int idClasificacion, String imagen, List<BebidasHasProducto> detalles)
    {
        ClasificacionJpaController controladorClasificacion = new ClasificacionJpaController(pmf.getInstancia().getEMF());
        Clasificacion clasificacion = controladorClasificacion.findClasificacion(idClasificacion);
        if((clasificacion == null))
            return false;
        try{
            Bebidas bebida = new Bebidas();
            bebida.setNombre(nombre);
            bebida.setPrecio(precio);
            bebida.setDescripcion(descripcion);
            bebida.setDireccionImange(imagen);
            bebida.setClasificacionidClasificacion(clasificacion);
            bebida.setActivo(Boolean.TRUE);
            insertar(bebida);
            for (BebidasHasProducto d : detalles)
            {
                try
                {
                    d.setBebidas(bebida);
                    BebidasHasProductoJpaController controlador = new BebidasHasProductoJpaController(pmf.getInstancia().getEMF());
                    controlador.create(d);
                    bebida.getBebidasHasProductoCollection().add(d);
                }
                catch (Exception e)
                {
                    return false;
                }
            }
            modificar(bebida);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
    private static boolean modificar(Bebidas bebida)
    {        
        try{
            BebidasJpaController controlador = new BebidasJpaController(pmf.getInstancia().getEMF());
            controlador.edit(bebida);
        }catch (Exception e){
            return false;
        }
        return true;  
    }
    
    public static boolean modificar (Bebidas bebida, List<BebidasHasProducto> listaEliminados)
    {
        try{
            BebidasJpaController controlador = new BebidasJpaController(pmf.getInstancia().getEMF());
            BebidasHasProductoJpaController controladorDetalle = new BebidasHasProductoJpaController(pmf.getInstancia().getEMF());
            if(!listaEliminados.isEmpty())
            {
                for(BebidasHasProducto temp : listaEliminados)
                {
                    try{
                        controladorDetalle.destroy(temp.getBebidasHasProductoPK());
                    }
                    catch(Exception e)
                    {                        
                    }
                }
            }
            for(BebidasHasProducto temp : bebida.getBebidasHasProductoCollection())
            {
                if(temp.getBebidasHasProductoPK()== null)
                {
                    temp.setBebidas(bebida);
                    controladorDetalle.create(temp);
                }
            }
            controlador.edit(bebida);
        }catch (Exception e){
            return false;
        }
        return true;
    }
    
    public static boolean modificar (String nombre, float precio, String descripcion, int idClasificacion, String imagen, List<BebidasHasProducto> detalles)
    {
        ClasificacionJpaController controladorClasificacion = new ClasificacionJpaController(pmf.getInstancia().getEMF());
        Clasificacion clasificacion = controladorClasificacion.findClasificacion(idClasificacion);
        if((clasificacion == null))
            return false;
        try{
            Bebidas bebida = new Bebidas();
            bebida.setNombre(nombre);
            bebida.setPrecio(precio);
            bebida.setDescripcion(descripcion);
            bebida.setDireccionImange(imagen);
            bebida.setClasificacionidClasificacion(clasificacion);
            bebida.setActivo(Boolean.TRUE);
            for (BebidasHasProducto d : detalles)
            {
                try
                {
                    d.setBebidas(bebida);
                    BebidasHasProductoJpaController controlador = new BebidasHasProductoJpaController(pmf.getInstancia().getEMF());
                    controlador.create(d);
                    bebida.getBebidasHasProductoCollection().add(d);
                }
                catch (Exception e)
                {
                    return false;
                }
            }
            modificar(bebida);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
    //eliminar
    public static boolean eliminar(Bebidas bebida)
    {
        try{
            BebidasJpaController controlador = new BebidasJpaController(pmf.getInstancia().getEMF()); 
            BebidasHasProductoJpaController controladorProducto = new BebidasHasProductoJpaController(pmf.getInstancia().getEMF());
            for(BebidasHasProducto l : bebida.getBebidasHasProductoCollection())
                {
                    try
                    {                        
                        controladorProducto.destroy(l.getBebidasHasProductoPK());
                    }
                    catch (Exception e)
                    {
                        return false;
                    }
                }
            controlador.destroy(bebida.getIdbebidas());
        }catch (Exception e){
            return false;
        }
        return true;  
    }
    
    public static boolean activar (int id)
    {
        BebidasJpaController controladorBebida = new BebidasJpaController(pmf.getInstancia().getEMF());
        Bebidas bebida = controladorBebida.findBebidas(id);
        if (bebida == null)
            return false;
        try{
            bebida.setActivo(Boolean.TRUE);
            BebidasJpaController controlador = new BebidasJpaController(pmf.getInstancia().getEMF());
            controlador.edit(bebida);
        }
        catch(Exception e){
            return false;
        }
        return true;
    }
    
    public static boolean desactivar (int id)
    {
        BebidasJpaController controladorBebida = new BebidasJpaController(pmf.getInstancia().getEMF());
        Bebidas bebida = controladorBebida.findBebidas(id);
        if (bebida == null)
            return false;
        try{
            bebida.setActivo(Boolean.FALSE);
            BebidasJpaController controlador = new BebidasJpaController(pmf.getInstancia().getEMF());
            controlador.edit(bebida);
        }
        catch(Exception e){
            return false;
        }
        return true;
    }
    
    public static Bebidas buscarId(int id)
    {
        Bebidas bebida;
        try{
            BebidasJpaController controladorBebida = new BebidasJpaController(pmf.getInstancia().getEMF());
            bebida = controladorBebida.findBebidas(id);
        }
        catch(Exception e)
        {
            return null;
        }
        return bebida;    
    }
    
    public static List<Bebidas> buscarActivos()
    {
        List<Bebidas> bebidas = (List) Consultas.consulta("Bebidas", "findByActivo", "activo", true);
        return bebidas;
    }
    
    public static List<Bebidas> buscarEliminados()
    {
        List<Bebidas> bebidas = (List) Consultas.consulta("Bebidas", "findByActivo", "activo", false);
        return bebidas;
    }
    
    public static List<Bebidas> buscarPorNombre(String nombre)
    {
        List<Bebidas> bebidas = (List) Consultas.consulta("Bebidas", "findByNombre", "nombre", "%"+nombre+"%");
        return bebidas;
    }
    public static Bebidas actualizarCosto(Bebidas bebida)
    {
        float x = 0;
        for(BebidasHasProducto temp : bebida.getBebidasHasProductoCollection())
        {
            Producto producto = temp.getProducto();
            x=x+Conversor.convertirProducto( producto.getUnidadDeMedidaidUnidadDeMedida(),temp.getUnidadDeMedidaidUnidadDeMedida(), producto.getPrecio())
                    *temp.getCantidad();
        }
        bebida.setPrecioCosto(x);
        modificar(bebida);
        return bebida;
    }
}
